#ifndef CONSTRUITREPRESENTATIONCONTRAT_HPP
#define CONSTRUITREPRESENTATIONCONTRAT_HPP

// Créé avec XmlCppClassGenerator version 2.0 beta.

#include "BaseConstruitRepresentation.hpp"
#include "XmlInfo/XmlInfoContrat.hpp"

#include <QtCore/QHash>

/** Classe permettant de construire des instances de \c XmlInfoContrat depuis le
  * contenu du fichier contracts.xml.
  * La classe donne accès à un QHash liant un \c id de contrat avec une instance
  * de XmlInfoContrat. Ce conteneur est construit à partir du fichier
  * contracts.xml, qui est téléchargé. Le travail de création est effectué par
  * la méthode construitInfoContrats, appelée depuis le slot
  * construitInfoInstance.
  *
  * @author Johan "Solo" Luisier
  * @date Novembre 2011
  */
class ConstruitRepresentationContrat : public BaseConstruitRepresentation
{
Q_OBJECT
public:
  /** Constructeur
  * Initialise la classe mère et le QHash InfosContrats.
   *
   *
   * @param[in] agence nom de l'agence.
  * @param[in] mdp mot de passe API.
  * @param[in] contenu type de contenu à télécharger (ici "contracts").
  * @param parent pointeur sur le QObject parent.
   */
  ConstruitRepresentationContrat( const QString& agence, const QString& mdp,
                                  const QString& contenu, QObject* parent = 0 );
  /** Destructeur
   * Le destructeur n'a rien de spécial à faire.
   */
  virtual ~ConstruitRepresentationContrat();
  /** Méthode qui effectue le traitement des données.
   * Les données sont téléchargées, interprétées et récupérées dans une instance
   * de \c StructureDonnees.
   *
   * @param[in] nomSyndicat nom du syndicat (non utilisé ici).
   */
  void chargeInformations( const QString& nomSyndicat = QString() );
  /** Permet d'accéder à InfosContrats.
    *
    * @return une référence constante sur InfosContrats.
    */
  const QHash< unsigned, XmlInfoContrat* >& infosContrats() const;
  /** Permet de récupérer un pointeur sur InfosContrats.
    *
    * @return l'addresse de InfosContrats.
    */
  const QHash< unsigned, XmlInfoContrat* >* infosContratsPtr() const;
  protected:
  /** Membre qui contient les données des différents contrats disponibles.
   * Les données sont indexées par l'identification du contrat.
   */
  QHash< unsigned, XmlInfoContrat* > InfosContrats;
  protected slots:
  /** Slot virtuel pur, qui est à connecté au signal infosPretes(),
    * l'implémentation dans chaque classe dérivée doit faire suivre l'appel à
    * une méthode propre à cette classe.
    *
    * @param[in] infos pointeur sur le conteneur des informations récupérées
    * depuis le fichier téléchargé.
    */
  void construitInfoInstance( const StructureDonnees* info );
  /** Méthode qui permet de construire les instances de \c XmlInfoContrat depuis
    * le conteneur \c infos.
    * La méthode efface toute information déjà contenue dans le QHash avant
    * de créer de nouvelles instances depuis zéro.
    *
    * @param[in] infos pointeur sur le conteneur des informations récupérées
    * depuis le fichier téléchargé.
    */
  void construitInfoContrats( const StructureDonnees* info );
};


#endif // CONSTRUITREPRESENTATIONCONTRAT_HPP
